package com.itheima;

import java.util.ArrayList;
import java.util.Scanner;

public class MyStudentManager {
    public static void main(String[] args) {
        //创建集合对象，存储学生元素
        ArrayList<Student> array = new ArrayList<Student>();
        //为了能够再次回到主界面，使用循环实现
        while (true) {
            //登录界面
            System.out.println("----------欢迎登录学生管理系统----------");
            System.out.println("1 添加学生");
            System.out.println("2 删除学生");
            System.out.println("3 修改学生");
            System.out.println("4 查看所有学生");
            System.out.println("5 退出");
            System.out.println("请输入你要选择的功能：");

            //键盘录入选功能选择
            Scanner sc = new Scanner(System.in);
            String s = sc.nextLine();

            switch (s) {
                case "1":
//                    System.out.println("添加学生");
                    addStudent(array);
                    break;
                case "2":
//                    System.out.println("删除学生");
                    deleteStudent(array);
                    break;
                case "3":
//                    System.out.println("修改学生");
                    updateStudent(array);
                    break;
                case "4":
//                    System.out.println("查看所有学生");
                    findAllStudent(array);
                    break;
                case "5":
                    System.out.println("谢谢使用");
//                break;
                    System.exit(0);
                default:
                    System.out.println("你输入的功能键不存在，请在功能键1-5之间选择");
                    break;
            }
        }
    }

    //定义一个方法，实现学生信息录入功能
    public static void addStudent(ArrayList<Student> array) {

        //为了让sid能在循环外也能被访问到，我们把它定义到循环外
        String sid;

        //键盘录入提示信息
        Scanner sc = new Scanner(System.in);

        //为了能实现再次输入学生编号，我们使用循环
        while (true) {
            System.out.println("请输入学生编号：");
            sid = sc.nextLine();
            //调用方法
            boolean flag = isUsed(array, sid);
            if (flag) {
                System.out.println("学号已存在，请重新输入");
            } else {
                break;
            }
        }

        System.out.println("请输入学生姓名：");
        String name = sc.nextLine();
        System.out.println("请输入学生年龄：");
        String age = sc.nextLine();
        System.out.println("请输入学生地址：");
        String address = sc.nextLine();

        //创建学生对象
        Student s = new Student();
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //将学生对象放到集合中
        array.add(s);
        //添加成功信息提示
        System.out.println("添加成功");
    }

    //定义一个方法，解决录入学生信息重复问题
    public static boolean isUsed(ArrayList<Student> array, String sid) {
        //定义一个boolean类型变量,初始值为false
        boolean flag = false;

        //遍历集合，获取每一个学生元素对应的sid，并与键盘录入的sid比较
        //true 表示学生学号已被占用
        //false 表示学生学号未被使用
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            if (s.getSid().equals(sid)) {
                flag = true;
                break;
            }
        }
        return flag;
    }

    //定义一个方法，实现学生信息删除功能
    public static void deleteStudent(ArrayList<Student> array) {
        //定义一个索引，初始值为-1
        int index = -1;

        //为了防止删除学生编号不存在的现象，能够实现再一次输入学生编号，使用while死循环实现
        while (true) {
            //键盘录入要删除的学生学号
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入你要删除的学生的编号");
            String sid = sc.nextLine();

            //删除前，先判断学生信息是否存在
            //遍历集合
            for (int i = 0; i < array.size(); i++) {
                Student s = array.get(i);
                if (s.getSid().equals(sid)) {
                    index = i;
                    break;
                }
            }

            //对索引值进行判断
            if (index == -1) {
                System.out.println("你删除的学生学号不存在，请重新输入");
            } else {
                array.remove(index);
                //删除成功提示信息
                System.out.println("删除成功");
                return;
            }
        }
    }

    //定义一个方法，实现学生信息修改功能
    public static void updateStudent(ArrayList<Student> array) {
        //为了让学生的属性值sid在循环外也能被访问到，我们把它定义在循环外
        String sid;

        //定义一个索引
        int index = -1;


        //键盘录入修改学生信息
        Scanner sc = new Scanner(System.in);

        //为了让程序再次回到这里，我们使用循环实现
        while (true) {
            System.out.println("请输入要修改的学生编号");
             sid = sc.nextLine();

            //遍历集合，判断键盘录入要修改学生编号是否存在
            for (int i = 0; i < array.size(); i++) {
                Student s = array.get(i);
                if (s.getSid().equals(sid)) {
                    index = i;
                }
            }
            if(index==-1){
                System.out.println("你输入的学生学号不存在，请重新输入");
            }else {
                break;
            }

        }

        System.out.println("请输入新学生姓名");
        String name = sc.nextLine();
        System.out.println("请输入新学生年龄");
        String age = sc.nextLine();
        System.out.println("请输入新学生地址");
        String address = sc.nextLine();

        //创建学生对象
        Student s = new Student();
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //遍历集合修改对应学生信息
        for(int i = 0;i<array.size();i++){
            Student stu = array.get(i);
            if(stu.getSid().equals(sid)){
                 array.set(i, s);
                System.out.println("修改成功");
                 break;
            }
        }
    }

    //定义一个方法，实现查看所有学生信息功能
    public static void findAllStudent(ArrayList<Student> array) {
        //查看前，判断集合中是否已录入信息
        if (array.size() == 0) {
            System.out.println("表中数据为空，请录入后再做查询");
            return;
        }

        //表头输出
        System.out.println("编号\t\t姓名\t\t年龄\t\t居住地");
        //遍历集合
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getSid() + "\t\t\t" + s.getName() + "\t\t" + s.getAge() + "岁\t\t" + s.getAddress());

        }
    }
}
